// 成本统计核算
// 人工成本 - 根据正常员工考勤数据核算投入工时 * 成员的人工成本天数(8小时/天/金额) 进行核算投入成本
// pro 项目基本信息
// hours 考勤记录
// member 成员列表
// other 合同/费用成本
import moment from 'moment';
const money = (pro, hours, member, other) => {
  // 过滤成员
  let lmeb = [];
  // 无参与时间 Del
  member.map(meb => {
    if (meb.joinTime !== null) {
      // 无离开时间 AddTime
      if (meb.quitTime === null) {
        lmeb.push({
          userName: meb.userName,
          userId: meb.userId,
          jobs: meb.jobs,
          role: meb.role,
          cost: meb.cost,
          joinTime: moment(meb.joinTime).format('YYYY-MM-DD'),
          quitTime: moment(pro.cycleEnd).format('YYYY-MM-DD')
        });
      } else { // 有参与、离开时间 Push
        lmeb.push({
          userName: meb.userName,
          userId: meb.userId,
          jobs: meb.jobs,
          role: meb.role,
          cost: meb.cost,
          joinTime: moment(meb.joinTime).format('YYYY-MM-DD'),
          quitTime: moment(meb.quitTime).format('YYYY-MM-DD')
        });
      }
    }
  });
  // console.log(lmeb);

  // 二次过滤 平铺日期与人工成本标准
  let ltmeb = [];
  for (let i = lmeb.length; i--;) {
    let diff = getDay(lmeb[i].joinTime, lmeb[i].quitTime);
    diff.map(day => {
      ltmeb.push({
        userName: lmeb[i].userName,
        userId: lmeb[i].userId,
        jobs: lmeb[i].jobs,
        role: lmeb[i].role,
        cost: lmeb[i].cost,
        day: day,
        hour: 0
      });
    });
  };
  // console.log(ltmeb);

  // 三次过滤 投入工时-关联工时数据 匹配过滤
  ltmeb.map(tmeb => {
    hours.map(h => {
      // 匹配工号
      if (h.userId === tmeb.userId) {
        // 匹配日期
        if (moment(h.logTime).format('YYYY-MM-DD') === moment(tmeb.day).format('YYYY-MM-DD')) {
          // 推入当前日期投入工时数
          tmeb.hour = h.hours;
        }
      }
    });
  });
  // console.log(ltmeb);

  // 每天合同、人工、项目费用
  let days = getDay(pro.cycleStart, pro.cycleEnd);
  let dayMoney = [];
  // 平铺日期与费用初始值  合同平摊项目周期   人工当天投入工时累计/成本累计
  for (let j = 0; j < days.length; j++) {
    // 推入人工成本/工时
    let shour = 0;
    let scost = 0;
    ltmeb.map(tmeb => {
      if (moment(tmeb.day).format('YYYY-MM-DD') === moment(days[j]).format('YYYY-MM-DD')) {
        shour += tmeb.hour;
        scost += (tmeb.cost / 8) * tmeb.hour;
      }
    });
    // 设定初始值
    dayMoney.push({
      dayTime: days[j], // 日期
      hour: shour, // 投入工时
      cost: scost, // 人工成本
      money: 0, // 项目费用
      contract: other.contractList[j].money // 基准
    });
  }
  // 推入项目费用值
  dayMoney.map(ind => {
    other.costList.map(keys => {
      if (moment(keys.time).format('YYYY-MM-DD') === moment(ind.dayTime).format('YYYY-MM-DD')) {
        ind.money = keys.money;
      }
    });
  });
  // console.log(dayMoney);

  // 返回值
  let dtAll = {
    days: dayMoney,
    bHours: ltmeb
  };
  return dtAll;
};

// 列出所有日期
const getDay = (start, end) => {
  let arr = [];
  start = moment(start).format('YYYY-MM-DD');
  end = moment(end).add(1, 'days').format('YYYY-MM-DD');
  while (moment(start).isBefore(end)) {
    arr.push(start);
    start = moment(start).add(1, 'days').format('YYYY-MM-DD');
  }
  return arr;
};

export default money;
